<!DOCTYPE html>
<html lang="en">

	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<title>Title</title>
	</head>

	<body>
		<div class="container-fluid bg-silver">
			<div class="container">
				<ul class="nav nav-pills">
					<li class="active"><a href="#zzbds" data-toggle="tab">正则表达式</a></li>
					<li><a href="#chrome" data-toggle="tab">chrome资料查询指令</a></li>
					<li><a href="#npm" data-toggle="tab">npm包管理器相关问题</a></li>
					<li><a href="#git" data-toggle="tab">git随笔</a></li>
				</ul>
				<div class="tab-content">
					<div class="tab-pane active fade in" id="zzbds">
						<h1 id="javascript04">JavaScript高级第04天笔记</h1>
						<h2 id="1">1.正则表达式概述</h2>
						<h3 id="11">1.1什么是正则表达式</h3>
						<p>正则表达式（ Regular Expression ）是用于匹配字符串中字符组合的模式。在JavaScript中，正则表达式也是对象。</p>
						<p>正则表通常被用来检索、替换那些符合某个模式（规则）的文本，例如验证表单：用户名表单只能输入英文字母、数字或者下划线，
							昵称输入框中可以输入中文(匹配)。此外，正则表达式还常用于过滤掉页面内容中的一些敏感词(替换)，或从字符串中获取我们想要的特定部分(提取)等 。</p>
						<p>其他语言也会使用正则表达式，本阶段我们主要是利用JavaScript 正则表达式完成表单验证。</p>
						<h3 id="12">1.2 正则表达式的特点</h3>
						<ol>
							<li>灵活性、逻辑性和功能性非常的强。</li>
							<li>可以迅速地用极简单的方式达到字符串的复杂控制。</li>
							<li>对于刚接触的人来说，比较晦涩难懂。比如：^\w+([-+.]\w+)<em>@\w+([-.]\w+)</em>.\w+([-.]\w+)*$</li>
							<li>实际开发,一般都是直接复制写好的正则表达式. 但是要求会使用正则表达式并且根据实际情况修改正则表达式. 比如用户名: /^[a-z0-9_-]{3,16}$/</li>
						</ol>
						<h2 id="2js">2.正则表达式在js中的使用</h2>
						<h3 id="21">2.1正则表达式的创建</h3>
						<p>在 JavaScript 中，可以通过两种方式创建一个正则表达式。</p>
						<p>方式一：通过调用RegExp对象的构造函数创建 </p>
						<pre><code class="js language-js">var regexp = new RegExp(/123/);
                    console.log(regexp);
                    </code></pre>
						<p>方式二：利用字面量创建 正则表达式</p>
						<pre><code class="js language-js"> var rg = /123/;
                    </code></pre>
						<h3 id="22">2.2测试正则表达式</h3>
						<p>test() 正则对象方法，用于检测字符串是否符合该规则，该对象会返回 true 或 false，其参数是测试字符串。</p>
						<pre><code class="js language-js">var rg = /123/;
                    console.log(rg.test(123));//匹配字符中是否出现123  出现结果为true
                    console.log(rg.test('abc'));//匹配字符中是否出现123 未出现结果为false
                    </code></pre>
						<p><img src="../source/images/img4.png" alt="" /></p>
						<h2 id="3">3.正则表达式中的特殊字符</h2>
						<h3 id="31">3.1正则表达式的组成</h3>
						<p>一个正则表达式可以由简单的字符构成，比如 /abc/，也可以是简单和特殊字符的组合，比如 /ab*c/ 。其中特殊字符也被称为元字符，在正则表达式中是具有特殊意义的专用符号，如 ^ 、$ 、+ 等。</p>
						<p>特殊字符非常多，可以参考： </p>
						<p><a href="https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions">MDN</a></p>
						<p>jQuery 手册：正则表达式部分</p>
						<p><a href="http://tool.oschina.net/regex">正则测试工具</a></p>
						<h3 id="32">3.2边界符</h3>
						<p>正则表达式中的边界符（位置符）用来提示字符所处的位置，主要有两个字符</p>
						<table>
							<thead>
								<tr>
									<th>边界符</th>
									<th>说明</th>
								</tr>
							</thead>
							<tbody>
								<tr>
									<td>^</td>
									<td>表示匹配行首的文本（以谁开始）</td>
								</tr>
								<tr>
									<td>$</td>
									<td>表示匹配行尾的文本（以谁结束）</td>
								</tr>
							</tbody>
						</table>

						<p>如果 ^和 $ 在一起，表示必须是精确匹配。</p>
						<pre><code class="js language-js">
var rg = /abc/; 
// 正则表达式里面不需要加引号 不管是数字型还是字符串型
// /abc/ 只要包含有abc这个字符串返回的都是true
console.log(rg.test('abc'));
console.log(rg.test('abcd'));
console.log(rg.test('aabcd'));
console.log('---------------------------');
var reg = /^abc/;
console.log(reg.test('abc')); // true
console.log(reg.test('abcd')); // true
console.log(reg.test('aabcd')); // false
console.log('---------------------------');
var reg1 = /^abc$/; // 精确匹配 要求必须是 abc字符串才符合规范
console.log(reg1.test('abc')); // true
console.log(reg1.test('abcd')); // false
console.log(reg1.test('aabcd')); // false
console.log(reg1.test('abcabc')); // false
                    </code></pre>
						<h3 id="33">3.3字符类</h3>
						<p>字符类表示有一系列字符可供选择，只要匹配其中一个就可以了。所有可供选择的字符都放在方括号内。</p>
						<h4 id="331">3.3.1 [] 方括号</h4>
						<p>表示有一系列字符可供选择，只要匹配其中一个就可以了</p>
						<pre><code class="js language-js">var rg = /[abc]/; // 只要包含有a 或者 包含有b 或者包含有c 都返回为true
console.log(rg.test('andy'));//true
console.log(rg.test('baby'));//true
console.log(rg.test('color'));//true
console.log(rg.test('red'));//false
var rg1 = /^[abc]$/; // 三选一 只有是a 或者是 b  或者是c 这三个字母才返回 true
console.log(rg1.test('aa'));//false
console.log(rg1.test('a'));//true
console.log(rg1.test('b'));//true
console.log(rg1.test('c'));//true
console.log(rg1.test('abc'));//true
----------------------------------------------------------------------------------
var reg = /^[a-z]$/ //26个英文字母任何一个字母返回 true  - 表示的是a 到z 的范围  
console.log(reg.test('a'));//true
console.log(reg.test('z'));//true
console.log(reg.test('A'));//false
-----------------------------------------------------------------------------------
//字符组合
var reg1 = /^[a-zA-Z0-9]$/; // 26个英文字母(大写和小写都可以)任何一个字母返回 true  
------------------------------------------------------------------------------------
//取反 方括号内部加上 ^ 表示取反，只要包含方括号内的字符，都返回 false 。
var reg2 = /^[^a-zA-Z0-9]$/;
console.log(reg2.test('a'));//false
console.log(reg2.test('B'));//false
console.log(reg2.test(8));//false
console.log(reg2.test('!'));//true
                    </code></pre>
						<h4 id="332">3.3.2量词符</h4>
						<p>量词符用来设定某个模式出现的次数。</p>
						<table>
							<thead>
								<tr>
									<th>量词</th>
									<th>说明</th>
								</tr>
							</thead>
							<tbody>
								<tr>
									<td>*</td>
									<td>重复0次或更多次</td>
								</tr>
								<tr>
									<td>+</td>
									<td>重复1次或更多次</td>
								</tr>
								<tr>
									<td>?</td>
									<td>重复0次或1次</td>
								</tr>
								<tr>
									<td>{n}</td>
									<td>重复n次</td>
								</tr>
								<tr>
									<td>{n,}</td>
									<td>重复n次或更多次</td>
								</tr>
								<tr>
									<td>{n,m}</td>
									<td>重复n到m次</td>
								</tr>
							</tbody>
						</table>

						<h4 id="333">3.3.3用户名表单验证</h4>
						<p>功能需求:</p>
						<ol>
							<li>如果用户名输入合法, 则后面提示信息为: 用户名合法,并且颜色为绿色</li>
							<li>如果用户名输入不合法, 则后面提示信息为: 用户名不符合规范, 并且颜色为红色</li>
						</ol>
						<p><img src="%0A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" alt="" /></p>
						<p><img src="%0A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" alt="" /></p>
						<p>分析:</p>
						<ol>
							<li>用户名只能为英文字母,数字,下划线或者短横线组成, 并且用户名长度为6~16位.</li>
							<li>首先准备好这种正则表达式模式/$[a-zA-Z0-9-_]{6,16}^/</li>
							<li>当表单失去焦点就开始验证. </li>
							<li>如果符合正则规范, 则让后面的span标签添加 right类.</li>
							<li>如果不符合正则规范, 则让后面的span标签添加 wrong类.</li>
						</ol>
						<pre><code class="js language-js">
&lt;input type="text" class="uname"&gt; 
&lt;span&gt;请输入用户名&lt;/span&gt;
&lt;script&gt;
	//  量词是设定某个模式出现的次数
	var reg = /^[a-zA-Z0-9_-]{6,16}$/; // 这个模式用户只能输入英文字母 数字 下划线 中划线
	var uname = document.querySelector('.uname');
	var span = document.querySelector('span');
	uname.onblur = function() {
		if (reg.test(this.value)) {
			console.log('正确的');
			span.className = 'right';
			span.innerHTML = '用户名格式输入正确';
		} else {
			console.log('错误的');
			span.className = 'wrong';
			span.innerHTML = '用户名格式输入不正确';
		}
	}
&lt;/script&gt;
                    </code></pre>
						<h4 id="334">3.3.4 括号总结</h4>
						<p>1.大括号 量词符. 里面表示重复次数</p>
						<p>2.中括号 字符集合。匹配方括号中的任意字符. </p>
						<p>3.小括号表示优先级</p>
						<p><a href="https://c.runoob.com/">正则表达式在线测试</a></p>
						<h3 id="34">3.4预定义类</h3>
						<p>预定义类指的是某些常见模式的简写方式.</p>
						<p><img src="../source/images/img3.png" alt="" /></p>
						<p><strong>案例:验证座机号码</strong></p>
						<pre><code class="js language-js">var reg = /^\d{3}-\d{8}|\d{4}-\d{7}$/;
var reg = /^\d{3,4}-\d{7,8}$/;
                    </code></pre>
						<p><strong>表单验证案例</strong></p>
						<pre><code class="js language-js">
//手机号验证:/^1[3|4|5|7|8][0-9]{9}$/;
//验证通过与不通过更换元素的类名与元素中的内容
if (reg.test(this.value)) {
	// console.log('正确的');
	this.nextElementSibling.className = 'success';
	this.nextElementSibling.innerHTML = '&lt;i class="success_icon"&gt;&lt;/i&gt; 恭喜您输入正确';
} else {
	// console.log('不正确');
	this.nextElementSibling.className = 'error';
	this.nextElementSibling.innerHTML = '&lt;i class="error_icon"&gt;&lt;/i&gt;格式不正确,请从新输入 ';
}
                    </code></pre>
						<pre><code class="js language-js">
//QQ号验证: /^[1-9]\d{4,}$/; 
//昵称验证:/^[\u4e00-\u9fa5]{2,8}$/
//验证通过与不通过更换元素的类名与元素中的内容 ,将上一步的匹配代码进行封装,多次调用即可
function regexp(ele, reg) {
	ele.onblur = function() {
		if (reg.test(this.value)) {
			// console.log('正确的');
			this.nextElementSibling.className = 'success';
			this.nextElementSibling.innerHTML = '&lt;i class="success_icon"&gt;&lt;/i&gt; 恭喜您输入正确';
		} else {
			// console.log('不正确');
			this.nextElementSibling.className = 'error';
			this.nextElementSibling.innerHTML = '&lt;i class="error_icon"&gt;&lt;/i&gt; 格式不正确,请从新输入 ';
		}
	}
};
                    </code></pre>
						<pre><code class="js language-js">
//密码验证:/^[a-zA-Z0-9_-]{6,16}$/
//再次输入密码只需匹配与上次输入的密码值 是否一致
                    </code></pre>
						<h3 id="35replace">3.5正则替换replace</h3>
						<p>replace() 方法可以实现替换字符串操作，用来替换的参数可以是一个字符串或是一个正则表达式。</p>
						<pre><code class="js language-js">var str = 'andy和red';
var newStr = str.replace('andy', 'baby');
console.log(newStr)//baby和red
//等同于 此处的andy可以写在正则表达式内
var newStr2 = str.replace(/andy/, 'baby');
console.log(newStr2)//baby和red
//全部替换
var str = 'abcabc'
var nStr = str.replace(/a/,'哈哈')
console.log(nStr) //哈哈bcabc
//全部替换g
var nStr = str.replace(/a/a,'哈哈')
console.log(nStr) //哈哈bc哈哈bc
//忽略大小写i
var str = 'aAbcAba';
var newStr = str.replace(/a/gi,'哈哈')//"哈哈哈哈bc哈哈b哈哈"
                    </code></pre>
						<p><strong>案例:过滤敏感词汇</strong></p>
						<pre><code class="js language-js">
&lt;textarea name="" id="message"&gt;&lt;/textarea&gt; 
&lt;button&gt;提交&lt;/button&gt;
&lt;div&gt;&lt;/div&gt;
&lt;script&gt;
	var text = document.querySelector('textarea');
	var btn = document.querySelector('button');
	var div = document.querySelector('div');
	btn.onclick = function() {
		div.innerHTML = text.value.replace(/激情|gay/g, '**');
	}
&lt;/script&gt;
                    </code></pre>
					</div>
					<div class="tab-pane fade" id="chrome">
						<p><strong>文件查询指令</strong></p>
						<p>flietype:pdf 简历</p>
						<ul>
							<li>注：flietype:所查文件格式 所查内容</li>
							<li>注：所查简历若被删除则 <em>cache:</em> 后接 简历网址 直接查询</li>
						</ul>
						<p><strong>站点查询指令</strong></p>
						<p>site:axihe 速查表</p>
						<ul>
							<li>注：site:所查网址 页面名称</li>
						</ul>
						<p><strong>时间查询</strong></p>
						<p>time in 北京</p>
						<ul>
							<li>注：time in 后接查询地址（不限制中英文）</li>
						</ul>
						<p><strong>汇率查询</strong></p>
						<p>100 btc to cn //100比特币转换人民币</p>
						<ul>
							<li>注：查询格式等同分段格式</li>
						</ul>
					</div>
					<div class="tab-pane fade" id="npm">
						<h3>1. 关于npm cache</h3>
						<p>NPM会把所有下载的包保存，放在用户文件夹下面，在我的windows10机器上是保存在C:\Users\zcche\AppData\Roaming\npm-cache下面</p>
						<h3>2. 关于package.lock.json</h3>
						<p>NPM install之后会计算每个包的sha1值，然后将包与他的sha1值关联保存在package.lock.json里面</p>
						<p>下次NPM
							install的时候会根据package.lock.json里面保存的sha1值去文件夹C:\Users\zcche\AppData\Roaming\npm-cache里面寻找包文件，如果存在，就不用再次从网上下载安装报了
						</p>
						<h3>3. NPM cache verify</h3>
						<p>目测这个命令是重新计算C:\Users\zcche\AppData\Roaming\npm-cache下的文件是否与sha1值匹配，如果不匹配可能删除？</p>
						<h3>4. NPM cache clean --force</h3>
						<p>这个命令从C:\Users\zcche\AppData\Roaming\npm-cache下删除所有缓存文件</p>
						<h3>注意：</h3>
						<p>NPM不同版本算出来的sha1貌似不完全一样，所以直接用别人的package.lock.json会报sha1不匹配的error</p>
						<h3>解决办法：</h3>
						<ol>
							<li>不使用别人的package.lock.json</li>
							<li>如果用了，删掉package.lock.json(记得删除回收站里的)，npm cache clear --force，npm install</li>
						</ol>
						<h3 id="npm">npm配置</h3>
						<p><em>npm作为一个NodeJS的模块管理，很有必要列出一些：</em></p>
						<ol>
							<li>模块路径、cache路径<ul>
									<li>先配置npm的全局模块的存放路径以及cache的路径，将node<em>global和node</em>cache
										文件夹放入nodejs根目录</li>
								</ul>
							</li>
							<li>使用cmd命令进行配置<ul>
									<li>启动cmd，输入
										<code>
											npm config set prefix "D:\nodejs\node_global"
											npm config set cache "D:\nodejs\node_cache"
										</code>
										<em>如果不进行这一步设置，npm的全局安装包，将不会在node安装文件夹里。</em></li>
								</ul>
							</li>
						</ol>
						<p><strong>如果这个步骤出现错误，如：operation not permitted, mkdir 'C:\Program Files\nodejs'，请使用管理员身份打开cmd命令行。</strong></p>
						<ol start="3">
							<li>
								<p>测试</p>
								<p>在cmd命令行里面，输入“npm install express -g”（“-g”这个参数意思是装到global目录下，也就是上面说设置的“H:\nodejs\node_global”里面。）。</p>
							</li>
							<li>
								<p>配置node_path</p>
								<p><em>进入环境变量对话框，在系统变量下新建"NODE<em>PATH"，输入”H:\nodejs\node</em>global\node_modules“。（ps：这一步相当关键。）</em></p>
							</li>
						</ol>
						<p><em>由于改变了module的默认地址，所以上面的用户变量都要跟着改变一下（用户变量"PATH"修改为“D:\nodejs\node_global\”），要不使用module的时候会导致输入命令出现“xxx不是内部或外部命令，也不是可运行的程序或批处理文件”这个错误。</em></p>
					</div>
					<div class="tab-pane fade" id="git">
						<h1>gitbub用户配置</h1>
						<h1 id="git">配置git</h1>
<ol>
<li>初始化git</li>
</ol>
<p>一般我们是要将自己的本地项目上传到github，实现开源共享，那么就首先需要让git知道它需要跟踪这个项目，所以，我们首先在
终端进入项目，初始化git(以mac为例，假设项目在桌面)：</p>
<pre><code>//进入项目
$ cd Desktop/myproject
//初始化git
$ git init
</code></pre>
<ol start="2">
<li>创建ssh key</li>
</ol>
<p>为了让github能够识别是我们自己上传文件，需要创建ssh key</p>
<pre><code>$ ssh-keygen -t rsa -C "your_email@youremail.com"
</code></pre>
<p>这里的your_email@youremail.com是你的邮箱地址，在输入后会询问你是否保存创建的ssh key，点回车就好，然后要求输入你要
设置的密码，如果直接回车表示不设密码。然后会提示你ssh key已经创建好。</p>
<ol start="3">
<li>将ssh可以写入github</li>
</ol>
<p>创建好本地的ssh key后，我们需要让github知道这个ssh key是我们自己，所以需要将生成的ssh key复制出来，写入github，在mac
下在终端输入</p>
<pre><code>cat ~/.ssh/id_rsa.pub
</code></pre>
<p>此时在终端会显示出刚刚创建好的ssh key，复制出来，在github在点击头像，然后点击setting，在找到SSH and GPG keys，创建一
个new ssh key，然后将刚刚复制的ssh key填入即可。</p>
<ol start="4">
<li>验证是否连接成功</li>
</ol>
<p>在终端输入</p>
<pre><code>$ ssh -T git@github.com
</code></pre>
<p>如果回车看到：You’ve successfully authenticated, but GitHub does not provide shell access 。表示已成功连上github。</p>
<ol start="5">
<li>设置username和email</li>
</ol>
<p>在把本项目上传到github之前还需要分别输入设置username和email，因为github每次commit都会记录他们。所以分别输入如下命
令：</p>
<pre><code>$ git config --global user.name "your name"
$ git config --global user.email "your_email@youremail.com"
</code></pre>
<ol start="6">
<li>添加远程地址</li>
</ol>
<p>在与github连接成功后，如何才能让相应的项目上传到对应的仓库呢？这里就需要添加远程地址，从而让我们的本地项目顺利到达对
应的仓库。
打开终端，输入</p>
<pre><code>$ git remote add origin git@github.com:yourName/yourRepo.git
</code></pre>
<p>后面的yourName和yourRepo分别是你的github的用户名和刚才新建的仓库名。</p>
					</div>
				</div>
			</div>
		</div>
	</body>

</html>
